// 数据库连接测试请求参数类型
export interface TestConnectionRequest {
  db_type: string;
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

// 数据库连接测试响应类型
export type TestConnectionResponse = null;

// 获取数据库列表请求参数类型
export interface GetDatabasesRequest {
  db_type: string;
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

// 获取数据库列表响应类型
export type GetDatabasesResponse = string[];

// 获取表列表请求参数类型
export interface GetTablesRequest {
  db_type: string;
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

// 获取表列表响应类型
export type GetTablesResponse = string[];

// 数据库配置信息
export interface DatabaseConfig {
  db_type: string;
  host: string;
  port: number;
  username: string;
  password: string;
  database: string;
}

// 数据库信息
export interface DatabaseInfo {
  display_name: string;
  config: DatabaseConfig;
  description: string;
  tables: string[];
  app_id: string;
}

// 获取数据库连接列表请求参数类型
export interface GetConnectionsRequest {
  app_id: string;
  isPage: boolean;
  page: number;
  page_size: number;
  offset: number;
}

// 创建数据库连接请求参数类型
export interface CreateConnectionRequest {
  name: string;
  intro: string;
  type: string;
  vectorModel: string;
  agentModel: string;
  app_id: string;
  administrator: any[];
  groupId: string;
  assessor: any[];
  databaseInfo: DatabaseInfo;
}

// 创建数据库连接响应类型
export interface CreateConnectionResponse {
  connection_id: string;
  schema_dataset_id: string;
  knowledge_dataset_id: string;
  sql_dataset_id: string;
  display_name: string;
  table_simple_infos: Array<{
    table_name: string;
    table_data_id: string;
    updated_at: string;
    created_at: string;
  }>;
}

// 更新数据库连接请求参数类型
export interface UpdateConnectionRequest {
  name: string;
  intro: string;
  type: string;
  vectorModel: string;
  agentModel: string;
  app_id: string;
  administrator: any[];
  groupId: string;
  assessor: any[];
  databaseInfo: DatabaseInfo;
}

// 更新数据库连接响应类型
export type UpdateConnectionResponse = null;

// 数据库连接信息
export interface ConnectionInfo {
  display_name: string;
  database_id: string;
  description: string;
  schema_dataset: string;
  knowledge_dataset: string;
  sql_dataset: string;
  table_simple_infos: any[];
  config: DatabaseConfig;
  created_at: string;
  updated_at: string;
}

// 获取数据库连接列表响应类型
export type GetConnectionsResponse = {
  databaseInfos: ConnectionInfo[];
  total: number;
  offset: number;
  page: number;
  page_size: number;
};

// 删除数据库连接响应类型
export type DeleteConnectionResponse = null;

// 设置数据库查询限制请求参数类型
export interface SetDatabaseLimitRequest {
  limit: number;
}

// 设置数据库查询限制响应类型
// 响应类型为null
export type SetDatabaseLimitResponse = null;

// 获取数据库查询限制响应类型
export interface GetDatabaseLimitResponse {
  limit: number;
}

// 获取表数据响应类型
export interface GetTableDataResponse {
  data: string;
}

// 术语信息类型
export interface TermInfo {
  knowledge_id: string;
  name: string;
  description: string;
  data_id?: string;
}

// 创建术语响应类型 - data字段类型
export type CreateTermResponse = TermInfo;

// 更新术语响应类型 - data字段类型
export type UpdateTermResponse = string;

// 删除术语响应类型 - data字段类型
export type DeleteTermResponse = null;

// 获取术语列表响应类型 - data字段类型
export type GetTermsResponse = TermInfo[];

// 案例信息类型
export interface CaseInfo {
  knowledge_id: string;
  name: string;
  description: string;
  data_id?: string;
}

// 创建案例响应类型 - data字段类型
export type CreateCaseResponse = CaseInfo;

// 更新案例响应类型 - data字段类型
export type UpdateCaseResponse = string;

// 删除案例响应类型 - data字段类型
export type DeleteCaseResponse = null;

// 获取案例列表响应类型
export type GetCasesResponse = {
  databaseInfos: CaseInfo[];
  total: number;
  offset: number;
  page: number;
  page_size: number;
};

// 表列信息类型
export interface TableColumn {
  column_name: string;
  column_description: string;
  column_zh_name: string;
  data_type: string;
  is_enum: boolean;
  enum_values: string[];
  examples: string[];
  is_primary_key: boolean;
}

// 表关系类型枚举
export enum RelationType {
  ManyToOne = 'Many-to-one',
  OneToMany = 'One-to-many',
  OneToOne = 'One-to-one',
}

// 表关系类型
export interface TableRelation {
  from_table_name: string;
  from_column_name: string;
  to_table_name: string;
  to_column_name: string;
  relation_type: RelationType | null;
}

// 表信息类型
export interface TableInfo {
  id: any;
  table_name: string;
  table_description: string;
  table_primary_key: string;
  table_relations: TableRelation[] | null;
  table_columns: TableColumn[];
}

// 表列搜索请求参数类型
export interface SearchTableColumnsRequest {
  isPage: boolean;
  offset: number;
  page: number;
  page_size: number;
}

// 表列搜索响应类型
export interface SearchTableColumnsResponse {
  table_info: TableInfo;
  total: number;
  offset: number;
  page: number;
  page_size: number;
}

// 更新表信息请求参数类型
export interface UpdateTableRequest {
  table_name: string;
  table_description: string;
  table_primary_key: string;
  table_relations: TableRelation[] | null;
  table_columns: TableColumn[];
}

// 更新表信息响应类型
export interface UpdateTableResponse {
  code: number;
  data: string;
  message: string;
}

// 更新数据表状态请求参数类型
export interface UpdateTableStatusRequest {
  database_id: string;
  update_status: 'add' | 'overlap' | 'delete';
}

// 更新数据表状态响应类型
export interface UpdateTableStatusResponse {
  code: number;
  data: TableInfo;
  message: string;
}

// 获取表列枚举值请求参数类型
export interface GetColumnEnumRequest {
  database_id: string;
  update_status: string;
}

// 获取表列枚举值响应类型
export type GetColumnEnumResponse = string[];

// 删除表响应类型
export interface DeleteTableResponse {
  code: number;
  data: null;
  message: string;
}

// 删除列响应类型
export interface DeleteColumnResponse {
  code: number;
  data: null;
  message: string;
}

// 更新列中文名称请求参数类型
export interface UpdateColumnZhNameRequest {
  column_name: string;
  column_zh_name: string;
}

// 更新列中文名称响应类型
export interface UpdateColumnZhNameResponse {
  code: number;
  data: {
    table_name: string;
    table_description: string;
  };
  message: string;
}

// 异步任务 - 创建/更新连接 返回的任务ID
export interface TaskIdResponse {
  task_id: string;
}

// 异步任务进度查询响应类型
export interface TaskProgressResponse {
  task_id: string;
  progress: number; // 0-100
  connection_id: string | null;
  ret_code: number; // 0 表示成功，非 0 表示失败
  ret_message: string; // 错误信息
}

// 异步任务进度删除响应类型
export type DeleteTaskProgressResponse = null;
